import dayjs from 'dayjs'
/**
 * 获取开始时间-结束时间
 * @param start
 * @param end
 * @param type  'day' | 'week'
 * @returns
 */
export const getStartEndTime = (start = 0, end = 0, type = 'day') => {
  const time = dayjs()
  return {
    startTime: `${time.add(start, type).format('YYYY-MM-DD')} 00:00:00`,
    endTime: `${time.add(end, type).format('YYYY-MM-DD')} 23:59:59`
  }
}

/**
 * 获取本月开始时间到今天的结束时间
 * @returns {object} 包含开始时间和结束时间的对象
 */
export function getMonthStartToEnd() {
  const now = new Date() // 获取当前日期
  const year = now.getFullYear()
  const month = now.getMonth()

  // 获取本月的第一天
  const startOfMonth = new Date(year, month, 1)

  // 当前日期作为结束时间
  const endOfToday = new Date() // 或者可以更精确地设置为当天的最后一秒

  return {
    startTime: `${dayjs(startOfMonth).format('YYYY-MM-DD')} 00:00:00`,
    endTime: `${dayjs(endOfToday).format('YYYY-MM-DD')} 23:59:59`
  }
}

// 月份从0开始计数，所以需要减1
export function getDaysInMonth(year, month, dayjs) {
  return dayjs(`${year}-${month}-01`).endOf('month').format('DD')
}

/**
 * 获取今日 yyyy-mm-dd， 且支持获取今日 + XX日的日期
 * @param day
 * @param type
 * @returns
 */
export function getDay(day = 0, type = 'day') {
  const time = dayjs()
  return time.add(day, type).format('YYYY-MM-DD')
}

// 传入年份和季度 获取开始时间和结束时间
export function getQuarterStartAndEnd(year, quarter) {
  // 计算季度的起始月份
  let startMonth
  switch (quarter) {
    case 1:
      startMonth = 0 // 第一季度从1月开始
      break
    case 2:
      startMonth = 3 // 第二季度从4月开始
      break
    case 3:
      startMonth = 6 // 第三季度从7月开始
      break
    case 4:
      startMonth = 9 // 第四季度从10月开始
      break
    default:
      throw new Error('Invalid quarter')
  }
  // 获取季度的第一天
  const start = dayjs(`${year}-${startMonth + 1}-01`)
  // 计算季度的结束月份
  let endMonth
  if (quarter === 1) {
    endMonth = 2 // 第一季度到3月结束
  } else if (quarter === 2) {
    endMonth = 5 // 第二季度到6月结束
  } else if (quarter === 3) {
    endMonth = 8 // 第三季度到9月结束
  } else {
    endMonth = 11 // 第四季度到12月结束
  }
  // 获取当月天数
  const dayNum = getDaysInMonth(year, endMonth + 1, dayjs)
  const end = dayjs(`${year}-${endMonth + 1}-${dayNum}`)
  return {
    start: start.format('YYYY-MM-DD 00:00:00'),
    end: end.format('YYYY-MM-DD 23:59:59')
  }
}

/**
 * 获取当前季度的开始时间和结束时间
 * @returns {object} 包含开始时间和结束时间的对象
 */
export function getCurrQuarter() {
  const currentMonth = dayjs().month() + 1
  const currentQuarter = Math.ceil(currentMonth / 3)
  const currentYear = dayjs().year()
  return {
    currentMonth: currentMonth + '月',
    currentYear: currentYear.toString(),
    currentQuarter: currentQuarter + '季度',
    ...getQuarterStartAndEnd(currentYear, currentQuarter)
  }
}

/**
 * 获取给定年份的开始时间和结束时间
 * @param {number} year - 年份
 * @returns {object} 包含开始时间和结束时间的对象
 */
export function getYearStartAndEnd(year) {
  // 确保年份是四位数
  const startOfYear = dayjs(`${year}-01-01`)
  const nextYearString = String(Number(year) + 1).padStart(4, '0')
  const endOfYear = dayjs(`${nextYearString}-01-01`).subtract(1, 'day')
  return {
    start: startOfYear.format('YYYY-MM-DD 00:00:00'),
    end: endOfYear.format('YYYY-MM-DD 23:59:59')
  }
}

/**
 * 获取给定年月的开始时间和结束时间
 * @param {number} year - 年份
 * @param {number} month - 月份（1-12）
 * @returns {object} 包含开始时间和结束时间的对象
 */
export function getMonthStartAndEnd(year, month) {
  const startOfMonth = dayjs(`${year}-${month}-01`)
  const endOfMonth = dayjs(`${year}-${month + 1}-01`).subtract(1, 'day')
  return {
    start: startOfMonth.format('YYYY-MM-DD 00:00:00'),
    end: endOfMonth.format('YYYY-MM-DD 23:59:59')
  }
}
/**
 * 根据开始年份获取到现在的年份列表
 *
 * @returns {array} 年份列表
 * @param startYear
 */
export function getPreviousYearsList(startYear) {
  const currentYear = new Date().getFullYear()
  const years = []
  for (let year = currentYear; year >= startYear; year--) {
    years.unshift(year.toString())
  }
  return years
}
